'use strict';

/**
 * Config for the router
 */
angular
		.module('app')
		.run(
				[ '$rootScope', '$state', '$stateParams',
						function($rootScope, $state, $stateParams) {
							$rootScope.$state = $state;
							$rootScope.$stateParams = $stateParams;
						} ])
		.config(
				[
						'$stateProvider',
						'$urlRouterProvider',
						function($stateProvider, $urlRouterProvider) {

							$urlRouterProvider.otherwise('/app/dashboard-v1');
							$stateProvider
									.state(
											'app',
											{
												abstract : true,
												url : '/app',
												templateUrl : '/Terminator/tpl/app.html'
											})
									.state(
											'app.dashboard-v1',
											{
												url : '/dashboard-v1',
												templateUrl : '/Terminator/tpl/app_dashboard_v1.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load([ '/Terminator/js/controllers/chart.js' ]);
															} ]
												}
											})
									.state(
											'app.dashboard-v2',
											{
												url : '/dashboard-v2',
												templateUrl : '/Terminator/tpl/app_dashboard_v2.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load([ '/Terminator/js/controllers/chart.js' ]);
															} ]
												}
											})
									.state(
											'app.ui',
											{
												url : '/ui',
												template : '<div ui-view class="fade-in-up"></div>'
											})
									.state(
											'app.ui.buttons',
											{
												url : '/buttons',
												templateUrl : '/Terminator/tpl/ui_buttons.html'
											})
									.state(
											'app.ui.icons',
											{
												url : '/icons',
												templateUrl : '/Terminator/tpl/ui_icons.html'
											})
									.state(
											'app.ui.grid',
											{
												url : '/grid',
												templateUrl : '/Terminator/tpl/ui_grid.html'
											})
									.state(
											'app.ui.widgets',
											{
												url : '/widgets',
												templateUrl : '/Terminator/tpl/ui_widgets.html'
											})
									.state(
											'app.ui.bootstrap',
											{
												url : '/bootstrap',
												templateUrl : '/Terminator/tpl/ui_bootstrap.html'
											})
									.state(
											'app.ui.sortable',
											{
												url : '/sortable',
												templateUrl : '/Terminator/tpl/ui_sortable.html'
											})
									.state(
											'app.ui.portlet',
											{
												url : '/portlet',
												templateUrl : '/Terminator/tpl/ui_portlet.html'
											})
									.state(
											'app.ui.timeline',
											{
												url : '/timeline',
												templateUrl : '/Terminator/tpl/ui_timeline.html'
											})
									.state(
											'app.ui.tree',
											{
												url : '/tree',
												templateUrl : '/Terminator/tpl/ui_tree.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'angularBootstrapNavTree')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/tree.js');
																				});
															} ]
												}
											})
									.state(
											'app.ui.toaster',
											{
												url : '/toaster',
												templateUrl : '/Terminator/tpl/ui_toaster.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'toaster')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/toaster.js');
																				});
															} ]
												}
											})
									.state(
											'app.ui.jvectormap',
											{
												url : '/jvectormap',
												templateUrl : '/Terminator/tpl/ui_jvectormap.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load('/Terminator/js/controllers/vectormap.js');
															} ]
												}
											})
									.state(
											'app.ui.googlemap',
											{
												url : '/googlemap',
												templateUrl : '/Terminator/tpl/ui_googlemap.html',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load(
																				[
																						'/Terminator/js/app/map/load-google-maps.js',
																						'/Terminator/js/app/map/ui-map.js',
																						'/Terminator/js/app/map/map.js' ])
																		.then(
																				function() {
																					return loadGoogleMaps();
																				});
															} ]
												}
											})
									.state(
											'app.chart',
											{
												url : '/chart',
												templateUrl : '/Terminator/tpl/ui_chart.html',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load('/Terminator/js/controllers/chart.js');
															} ]
												}
											})
									// table
									.state('app.table', {
										url : '/table',
										template : '<div ui-view></div>'
									})
									.state(
											'app.table.static',
											{
												url : '/static',
												templateUrl : '/Terminator/tpl/table_static.html'
											})
									.state(
											'app.table.datatable',
											{
												url : '/datatable',
												templateUrl : '/Terminator/tpl/table_datatable.html'
											})
									.state(
											'app.table.footable',
											{
												url : '/footable',
												templateUrl : '/Terminator/tpl/table_footable.html'
											})
									.state(
											'app.table.grid',
											{
												url : '/grid',
												templateUrl : '/Terminator/tpl/table_grid.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'ngGrid')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/grid.js');
																				});
															} ]
												}
											})
									// form
									.state(
											'app.form',
											{
												url : '/form',
												template : '<div ui-view class="fade-in"></div>',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load('/Terminator/js/controllers/form.js');
															} ]
												}
											})
									.state(
											'app.form.elements',
											{
												url : '/elements',
												templateUrl : '/Terminator/tpl/form_elements.html'
											})
									.state(
											'app.form.validation',
											{
												url : '/validation',
												templateUrl : '/Terminator/tpl/form_validation.html'
											})
									.state(
											'app.form.wizard',
											{
												url : '/wizard',
												templateUrl : '/Terminator/tpl/form_wizard.html'
											})
									.state(
											'app.form.fileupload',
											{
												url : '/fileupload',
												templateUrl : '/Terminator/tpl/form_fileupload.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'angularFileUpload')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/file-upload.js');
																				});
															} ]
												}
											})
									.state(
											'app.form.imagecrop',
											{
												url : '/imagecrop',
												templateUrl : '/Terminator/tpl/form_imagecrop.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'ngImgCrop')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/imgcrop.js');
																				});
															} ]
												}
											})
									.state(
											'app.form.select',
											{
												url : '/select',
												templateUrl : '/Terminator/tpl/form_select.html',
												controller : 'SelectCtrl',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'ui.select')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/select.js');
																				});
															} ]
												}
											})
									.state(
											'app.form.slider',
											{
												url : '/slider',
												templateUrl : '/Terminator/tpl/form_slider.html',
												controller : 'SliderCtrl',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'vr.directives.slider')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/slider.js');
																				});
															} ]
												}
											})
									.state(
											'app.form.editor',
											{
												url : '/editor',
												templateUrl : '/Terminator/tpl/form_editor.html',
												controller : 'EditorCtrl',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load(
																				'textAngular')
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('/Terminator/js/controllers/editor.js');
																				});
															} ]
												}
											})
									// pages
									.state(
											'app.page',
											{
												url : '/page',
												template : '<div ui-view class="fade-in-down"></div>'
											})
									.state(
											'app.page.profile',
											{
												url : '/profile',
												templateUrl : '/Terminator/tpl/page_profile.html'
											})
									.state(
											'app.page.post',
											{
												url : '/post',
												templateUrl : '/Terminator/tpl/page_post.html'
											})
									.state(
											'app.page.search',
											{
												url : '/search',
												templateUrl : '/Terminator/tpl/page_search.html'
											})
									.state(
											'app.page.invoice',
											{
												url : '/invoice',
												templateUrl : '/Terminator/tpl/page_invoice.html'
											})
									.state(
											'app.page.price',
											{
												url : '/price',
												templateUrl : '/Terminator/tpl/page_price.html'
											})
									.state(
											'app.docs',
											{
												url : '/docs',
												templateUrl : '/Terminator/tpl/docs.html'
											})
									// others
									.state(
											'lockme',
											{
												url : '/lockme',
												templateUrl : '/Terminator/tpl/page_lockme.html'
											})
									.state(
											'access',
											{
												url : '/access',
												template : '<div ui-view class="fade-in-right-big smooth"></div>'
											})
									.state(
											'access.signin',
											{
												url : '/signin',
												templateUrl : '/Terminator/tpl/page_signin.html',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([ '/Terminator/js/controllers/signin.js' ]);
															} ]
												}
											})
									.state(
											'access.signup',
											{
												url : '/signup',
												templateUrl : '/Terminator/tpl/page_signup.html',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([ '/Terminator/js/controllers/signup.js' ]);
															} ]
												}
											})
									.state(
											'access.forgotpwd',
											{
												url : '/forgotpwd',
												templateUrl : '/Terminator/tpl/page_forgotpwd.html'
											})
									.state(
											'access.404',
											{
												url : '/404',
												templateUrl : '/Terminator/tpl/page_404.html'
											})

									// fullCalendar
									.state(
											'app.calendar',
											{
												url : '/calendar',
												templateUrl : '/Terminator/tpl/app_calendar.html',
												// use resolve to load other
												// dependences
												resolve : {
													deps : [
															'$ocLazyLoad',
															'uiLoad',
															function(
																	$ocLazyLoad,
																	uiLoad) {
																return uiLoad
																		.load(
																				[
																						'/Terminator/vendor/jquery/fullcalendar/fullcalendar.css',
																						'/Terminator/vendor/jquery/fullcalendar/theme.css',
																						'/Terminator/vendor/jquery/jquery-ui-1.10.3.custom.min.js',
																						'/Terminator/vendor/libs/moment.min.js',
																						'/Terminator/vendor/jquery/fullcalendar/fullcalendar.min.js',
																						'/Terminator/js/app/calendar/calendar.js' ])
																		.then(
																				function() {
																					return $ocLazyLoad
																							.load('ui.calendar');
																				})
															} ]
												}
											})

									// mail
									.state(
											'app.mail',
											{
												abstract : true,
												url : '/mail',
												templateUrl : '/Terminator/tpl/mail.html',
												// use resolve to load other
												// dependences
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([
																				'/Terminator/js/app/mail/mail.js',
																				'/Terminator/js/app/mail/mail-service.js',
																				'/Terminator/vendor/libs/moment.min.js' ]);
															} ]
												}
											})
									.state(
											'app.mail.list',
											{
												url : '/inbox/{fold}',
												templateUrl : '/Terminator/tpl/mail.list.html'
											})
									.state(
											'app.mail.detail',
											{
												url : '/{mailId:[0-9]{1,4}}',
												templateUrl : '/Terminator/tpl/mail.detail.html'
											})
									.state(
											'app.mail.compose',
											{
												url : '/compose',
												templateUrl : '/Terminator/tpl/mail.new.html'
											})

									.state(
											'layout',
											{
												abstract : true,
												url : '/layout',
												templateUrl : '/Terminator/tpl/layout.html'
											})
									.state(
											'layout.fullwidth',
											{
												url : '/fullwidth',
												views : {
													'' : {
														templateUrl : '/Terminator/tpl/layout_fullwidth.html'
													},
													'footer' : {
														templateUrl : '/Terminator/tpl/layout_footer_fullwidth.html'
													}
												},
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([ '/Terminator/js/controllers/vectormap.js' ]);
															} ]
												}
											})
									.state(
											'layout.mobile',
											{
												url : '/mobile',
												views : {
													'' : {
														templateUrl : '/Terminator/tpl/layout_mobile.html'
													},
													'footer' : {
														templateUrl : '/Terminator/tpl/layout_footer_mobile.html'
													}
												}
											})
									.state(
											'layout.app',
											{
												url : '/app',
												views : {
													'' : {
														templateUrl : '/Terminator/tpl/layout_app.html'
													},
													'footer' : {
														templateUrl : '/Terminator/tpl/layout_footer_fullwidth.html'
													}
												},
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([ '/Terminator/js/controllers/tab.js' ]);
															} ]
												}
											})
									.state('apps', {
										abstract : true,
										url : '/apps',
										templateUrl : 'tpl/layout.html'
									})
									.state(
											'apps.note',
											{
												url : '/note',
												templateUrl : '/Terminator/tpl/apps_note.html',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([
																				'/Terminator/js/app/note/note.js',
																				'/Terminator/vendor/libs/moment.min.js' ]);
															} ]
												}
											})
									.state(
											'apps.contact',
											{
												url : '/contact',
												templateUrl : '/Terminator/tpl/apps_contact.html',
												resolve : {
													deps : [
															'uiLoad',
															function(uiLoad) {
																return uiLoad
																		.load([ '/Terminator/js/app/contact/contact.js' ]);
															} ]
												}
											})
									.state(
											'app.weather',
											{
												url : '/weather',
												templateUrl : '/Terminator/tpl/apps_weather.html',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load({
																			name : 'angular-skycons',
																			files : [
																					'/Terminator/js/app/weather/skycons.js',
																					'/Terminator/vendor/libs/moment.min.js',
																					'/Terminator/js/app/weather/angular-skycons.js',
																					'/Terminator/js/app/weather/ctrl.js' ]
																		});
															} ]
												}
											})
									.state(
											'music',
											{
												url : '/music',
												templateUrl : '/Terminator/tpl/music.html',
												controller : 'MusicCtrl',
												resolve : {
													deps : [
															'$ocLazyLoad',
															function(
																	$ocLazyLoad) {
																return $ocLazyLoad
																		.load([
																				'com.2fdevs.videogular',
																				'com.2fdevs.videogular.plugins.controls',
																				'com.2fdevs.videogular.plugins.overlayplay',
																				'com.2fdevs.videogular.plugins.poster',
																				'com.2fdevs.videogular.plugins.buffering',
																				'/Terminator/js/app/music/ctrl.js',
																				'/Terminator/js/app/music/theme.css' ]);
															} ]
												}
											})
									.state(
											'music.home',
											{
												url : '/home',
												templateUrl : '/Terminator/tpl/music.home.html'
											})
									.state(
											'music.genres',
											{
												url : '/genres',
												templateUrl : '/Terminator/tpl/music.genres.html'
											})
									.state(
											'music.detail',
											{
												url : '/detail',
												templateUrl : '/Terminator/tpl/music.detail.html'
											})
									.state(
											'music.mtv',
											{
												url : '/mtv',
												templateUrl : '/Terminator/tpl/music.mtv.html'
											})
									.state(
											'music.mtvdetail',
											{
												url : '/mtvdetail',
												templateUrl : '/Terminator/tpl/music.mtv.detail.html'
											})
									.state(
											'music.playlist',
											{
												url : '/playlist/{fold}',
												templateUrl : '/Terminator/tpl/music.playlist.html'
											})
						} ]);